10 H=0:REM IF H = 0 THEN ASSEMBLY IS IN DECIMAL 50 HE$="0123456789ABCDEF":SZ=1:ZO$="000" 100 PRINT"[147] SIMPLE ASSEMBLER CONVENTIONS:" 110 DIMM$(56),TY(56),OP(56) 120 FORI=1TO56:READM$(I) 122 ROP$=MID$(M$(I),4,1):TY(I)=VAL(ROP$) 124 OP$=RIGHT$(M$(I),3):OP(I)=VAL(OP$) 126 M$(I)=LEFT$(M$(I),3) 140 NEXTI: PRINT 150 PRINT"IMMEDIATE LDA #15 155 [153]"ABSOLUTE LDA 1500 160 PRINT"ZERO PAGE LDA 15 165 [153]"ACCUMULATOR ASL 170 PRINT"INDIRECT X LDA (15X) 175 [153]"INDIRECT Y LDA (15)Y 177 PRINT"ZERO PAGE X LDA 15X 179 [153]"ZERO PAGE Y LDX 15Y 180 PRINT"ABSOLUTE X LDA 1500X 185 [153]"ABSOLUTE Y LDA 1500Y 189 PRINT:PRINT" ENTER ALL NUMBERS IN "; 190 IFH=1 THENPRINT"HEX":GOTO200 195 PRINT"DECIMAL" 200 PRINT:PRINT"PLEASE INPUT STARTING ADDRESS FOR ML PROGRAM":INPUT SA$ 210 IFH=1THENH$=SA$:GOSUB5000:SA=DE:GOTO220 215 SA=VAL(SA$) 220 TA=SA:PRINT"[147]":REM CLEAR THE SCREEN 230 IFH=1THENDE=SA:SZ=3:GOSUB4000:PRINTH$;:GOTO240 235 PRINTSA" "; 240 INPUTMN$:PRINT"[145]"SPC(20);:REM GO UP ONE LINE AND OVER 20 SPACES 241 REM ADD NEW PSEUDO-OPS HERE 242 IFRIGHT$(MN$,7)="FORWARD"THENFB=SA 243 IFRIGHT$(MN$,7)="RESOLVE"THENFR=SA-FB:POKEFB+1,FR-2:PRINT" OK":GOTO230 244 IFRIGHT$(MN$,4)="POKE"THENPRINT"ADDR,NUMBER(DEC)"; 245 IFRIGHT$(MN$,4)="POKE"THENINPUTADR,NUM:POKEADR,NUM:GOTO230 250 IFMN$="END"THENPRINT:PRINT" PROGRAM IS FROM"TA"TO"SA:END 260 L=LEN(MN$):L$=LEFT$(MN$,3) 270 FORI=1TO56:IFL$=M$(I)THEN300 280 NEXTI 290 GOTO850 300 REM PRIMARY OPCODE CATEGORIES 301 TY=TY(I):OP=OP(I) 305 IFFB=SATHENTN=0:GOTO2010 310 IFTY=0THENGOTO1000 320 IFTY=3THENTY=1:IFL=3THENOP=OP+8:GOTO1000 330 R$=RIGHT$(MN$,L-4):IFH=1THENGOSUB6000 340 LR$=LEFT$(R$,1):LL=LEN(R$):IFLR$="#"THEN480 350 IFLR$="("THEN520 360 IFTY=8THEN600 370 IFTY=3THENOP=OP+8:GOTO1000 380 IFRIGHT$(R$,1)="X"ORRIGHT$(R$,1)="Y"THEN630 390 IFLEFT$(L$,1)="J"THEN820 400 TN=VAL(R$):IFTN>255THEN430 410 IFTY=1ORTY=3ORTY=4ORTY=5THENOP=OP+4 420 GOTO2000 430 H%=TN/256:L%=TN-256*H%:IFTY=2ORTY=7THENOP=OP+8:GOTO470 440 IFTY=1ORTY=3ORTY=4ORTY=5THENOP=OP+12:GOTO470 450 IFTY=6ORTY=9THEN470 460 GOTO850 470 GOTO3000 480 TN=VAL(RIGHT$(R$,LL-1)) 490 IFTY=1THENOP=OP+8:GOTO2000 500 IFTY=4ORTY=5THENGOTO2000 510 GOTO850 520 IFRIGHT$(R$,2)=")Y"THEN540 530 IFRIGHT$(R$,2)="X)"THEN570 540 TN=VAL(MID$(R$,2,LL-3)) 550 IFTY=1THENOP=OP+16:GOTO2000 560 GOTO850 570 TN=VAL(MID$(R$,2,LL-3)) 580 IFTY=1THENGOTO2000 590 GOTO850 600 TN=VAL(R$):TN=TN-SA-2:IFTN<-128ORTN>127THENPRINT"TOO FAR ";:GOTO850 610 IFTN<0THENTN=TN+256 620 GOTO2000 630 IFRIGHT$(R$,2)=")Y"THEN540 640 IFRIGHT$(R$,1)="X"THEN720 650 REM *ZERO Y 660 TN=VAL(LEFT$(R$,LL-1)):IFTN>255THEN680 670 IFTY=2ORTY=5THEN730 675 IFTY=1THEN760 680 GOSUB770:IFTY=1THENOP=OP+24:GOTO710 690 IFTY=5THENOP=OP+28:GOTO710 700 GOTO850 710 GOTO3000 720 TN=VAL(LEFT$(R$,LL-1)):IFTN>255THENGOSUB770:GOTO780 730 IFTY=2THENOP=OP+16:GOTO760 740 IFTY=1ORTY=3ORTY=5THENOP=OP+20:GOTO760 750 GOTO850 760 GOTO2000 770 H%=TN/256:L%=TN-256*H%:RETURN 780 IFTY=2THENOP=OP+24:GOTO810 790 IFTY=1ORTY=3ORTY=5THENOP=OP+28:GOTO810 800 GOTO850 810 GOTO3000 820 TN=VAL(R$) 830 GOSUB770 840 GOTO710 850 PRINT" ERROR ":GOTO230 1000 REM 1 BYTE INSTRUCTIONS 1010 POKESA,OP:SA=SA+1:IFH=1THEN 1030 1020 PRINTOP:GOTO230 1030 DE = OP:GOSUB4000:PRINTH$:GOTO230 2000 REM 2 BYTE INSTRUCTIONS 2005 IFTN>255THENPRINT" INCORRECT ARGUMENT.":GOTO230 2010 POKESA,OP:POKESA+1,TN:SA=SA+2:IFH=1THEN2030 2020 PRINTOP;TN:GOTO230 2030 DE = OP:GOSUB4000:PRINTH$" "; 2040 DE = TN:GOSUB4000:PRINTH$:GOTO230 3000 REM 3 BYTE INSTRUCTIONS 3010 POKESA,OP:POKESA+1,L%:POKESA+2,H%:SA=SA+3:IFH=1THEN3030 3020 PRINTOP;L%;H%:GOTO230 3030 DE = OP:GOSUB4000:PRINTH$" "; 3040 DE = L%:GOSUB4000:PRINTH$" "; 3050 DE = H%:GOSUB4000:PRINTH$:GOTO230 4000 REM DECIMAL TO HEX (DE TO H$) 4010 H$="":FORM=SZTO0STEP-1:N%=DE/(16^M):DE=DE-N%*16^M:H$=H$+MID$(HE$,N%+1,1) 4020 NEXT:SZ=1:RETURN 5000 REM HEX TO DECIMAL (H$ TO DE) 5010 D=0:Q=3:FORM=1TO4:FORW=0TO15:IFMID$(H$,M,1)=MID$(HE$,W+1,1)THEN5030 5020 NEXTW 5030 D1=W*(16^(Q)):D=D+D1:Q=Q-1:NEXTM:DE=INT(D):RETURN 6000 REM ACCEPT HEX OPCODE INPUT AND TRANSLATE IT TO DECIMAL 6010 IFLEFT$(R$,1)="#"THENH$="00"+RIGHT$(R$,2):GOSUB5000:R$="#"+STR$(DE):RETURN 6020 LS=LEN(R$):AZ$=LEFT$(R$,1):ZA$=MID$(R$,LS,1):IFAZ$<>"("THEN6050 6030 IFZA$="Y"THENH$="00"+MID$(R$,2,2):GOSUB5000:R$="("+STR$(DE)+")Y":RETURN 6040 IFZA$=")"THENH$="00"+MID$(R$,2,2):GOSUB5000:R$="("+STR$(DE)+"X)":RETURN 6050 IFZA$="X"ORZA$="Y"THEN6070 6060 H$=LEFT$(ZO$,4-LS)+R$:GOSUB5000:R$=STR$(DE):RETURN 6070 IFLS=5THENH$=LEFT$(R$,4):GOTO6090 6080 H$="00"+LEFT$(R$,2) 6090 GOSUB5000:R$=STR$(DE)+ZA$:RETURN 20000 DATAADC1097,AND1033,ASL3002,BCC8144,BCS8176,BEQ8240,BIT7036,BMI8048 20010 DATABNE8208,BPL8016,BRK0000,BVC8080,BVS8112,CLC0024,CLD0216,CLI0088 20020 DATACLV0184,CMP1193,CPX4224,CPY4192,DEC2198,DEX0202,DEY0136,EOR1065 20030 DATAINC2230,INX0232,INY0200,JMP6076,JSR9032,LDA1161,LDX5162,LDY5160 20040 DATALSR3066,NOP0234,ORA1001,PHA0072,PHP0008,PLA0104,PLP0040,ROL3034 20050 DATAROR3098,RTI0064,RTS0096,SBC1225,SEC0056,SED0248,SEI0120,STA1129 20060 DATASTX2134,STY2132,TAX0170,TAY0168,TSX0186,TXA0138,TXS0154,TYA0152